//获取options cnpm i  loader-utils -D 可获取options配置
const {getOptions} = require('loader-utils'); 

//校验获取options是否合法
const {validate} = require('schema-utils');

// 校验options规则
const babelSchema = require('../json/babelLoader.json');

//babel.transform用来编译代码方法，是一个普通异步方法
//util.promisify将普通异步方法转化成基于promise的异步方法
const babel =require('@babel/core');
const util = require('util');
const transform=util.promisify(babel.transform);

module.exports = function(content, map, meta) {
  const options = getOptions(this) || {};
  validate(babelSchema, options, {
    name: "Babel Loader"
  });
  //创建异步
  const callback = this.async();
  //创建babel
  transform(content,options)
  .then(({code,map})=>callback(null,code,map,meta))
  .catch((e)=>callback(e))
}
